package org.geekbang.work9;

import java.util.EventObject;
import java.util.List;

/**
 * 消息发布接口.
 *
 * @author leo
 * @date 2021/8/29
 * @since 1.0.0
 */
public interface Publisher<T extends EventObject> {

    /**
     * 功能: 发布事件.
     * @author leo
     * @date 2021/8/29
     * @param event {@link T}
     *
    */
    void publish( T event);

    /**
     * 功能: 增加监听器.
     * @author leo
     * @date 2021/8/29
     * @param listener {@link EventObjectListener<T>}
    */
    void addListener(EventObjectListener<T> listener);

    /**
     * 功能: 获取所有的监听器.
     * @author leo
     * @date 2021/8/29
     * @return {@link List<EventObjectListener<T>>}
    */
    List<EventObjectListener<T>> getListeners();
}
